#include <iostream>
using namespace std;
#include "MyQueue.h"

/* 构造函数 */
MyQueue::MyQueue()
{
    /* 初始化 */
    m_size = 0;
    m_capacity = 10;
    m_data = new int[m_capacity];

}

MyQueue::~MyQueue()
{
    delete [] m_data;
}


int MyQueue::reCapacity()//扩容
{
    int  * tmpData = m_data;//1.备份

    int newCapacity = m_capacity << 1;//左移1 //2.创建空间
    m_data = new int[newCapacity];

    for(int idx = 0; idx < m_size; idx++)//3.数据迁移
    {
        m_data[idx] = tmpData[idx];
    }

    delete [] tmpData;//4.释放内存

    m_capacity = newCapacity;//5.更新容量

    return 0;
}


/* 入队 */
void MyQueue::push(int data)
{
    if(m_size == m_capacity)
    {
        reCapacity();//调用扩容函数
    }
    m_data[m_size++] = data;
}

/* 出队 */
void MyQueue::pop()
{

    for(int idx = 0; idx < m_size - 1; idx++)//注意size - 1
    {
        m_data[idx] = m_data[idx + 1];
    }
    m_size--;//元素个数减一
}

/* 查看队头元素*/
int MyQueue::front()
{
    return m_data[0];
}

/* 查看队尾元素*/
int MyQueue::rear()
{
    return m_data[m_size - 1];
}

 /* 判断队列是否为空*/
bool MyQueue::empty()
{
    return m_size == 0;
}

/* 查看队列的元素个数*/
int MyQueue::size()
{
    return m_size;
}

